package br.senai.sc.controller;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.senai.sc.dao.GenericDAOImp;
import br.senai.sc.entity.Usuario;
import static br.senai.sc.util.Flags.PERFIL_FORNECEDOR;
import br.senai.sc.util.SessionObjectDestroyer;
import br.senai.sc.util.StringToMD5;

@ManagedBean
@SessionScoped
public class UsuarioController implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 6668869642094026395L;
	private Usuario usuario;
	private Usuario usuarioSelecionado;
	private List<Usuario> listaUsuarios;
	private GenericDAOImp<?, ?> dao;

	@PostConstruct
	public void init() {
		SessionObjectDestroyer.destroy();
		LoginController logincontroller = (LoginController) FacesContext
				.getCurrentInstance().getExternalContext().getSessionMap()
				.get("loginController");
		if (logincontroller != null) {
			if (logincontroller.getUsuario().getPerfil() == PERFIL_FORNECEDOR) {
				usuario = logincontroller.getUsuario();
				usuario.setSenha("");
			}
		}
	}

	public UsuarioController() {
		this.usuario = new Usuario();
		dao = new GenericDAOImp();
	}

	public Usuario getUsuarioSelecionado() {
		return usuarioSelecionado;
	}

	public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
		this.usuarioSelecionado = usuarioSelecionado;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Usuario> getListaUsuarios() {

		listaUsuarios = dao.listAllByProperty(Usuario.class, "perfil",
				PERFIL_FORNECEDOR);

		return listaUsuarios;
	}

	public void setListaUsuarios(List<Usuario> listaUsuarios) {
		this.listaUsuarios = listaUsuarios;
	}

	// Só criamos usuarios Fornecedores
	public String salvarUsuario() {
		// Usuario user =
		// (Usuario)JSFUtils.flashScope().get("usuarioController");

		usuario.setAtivo(true);
		usuario.setPerfil(PERFIL_FORNECEDOR);

		// Transformando a senha em MD5
		usuario.setSenha(StringToMD5.convertStringToMD5(usuario.getSenha()));
		if (usuario.getId() == null) {
			dao.create(usuario);
		} else {

			dao.merge(usuario);
		}
		listaUsuarios = null;
		init();
		return "listarfornecedores?faces-redirect=true";

	}

	public String editar(Usuario user) {
		user.setSenha("");
		this.usuario = user;

		// JSFUtils.flashScope().put("usuarioController", this);
		return "editarfornecedor";
	}

	public void remover() {
		usuarioSelecionado.setAtivo(false);
		dao.merge(usuarioSelecionado);
	}

	public String cancelar() {
		return "/index.xhtml?faces-redirect=true";
	}
}
